
var listaOrdenes = new ListaOT('td_planificacion_ordenes', 'newlong');

jQuery(document).ready(function()
    {
	// ---------- Filtros ---------- //
	
	// Campos de fechas del filtro.
	jQuery(".fecha").datepicker( {showAnim: "slideDown", dateFormat: "dd/mm/yy"} );

	jQuery("#form_filtros input[name='f-fecha1']").change( function()
		{changeCampoFecha("#form_filtros input[name='f-fecha1']", "#form_filtros input[name='f-fecha2']", 1);});
	jQuery("#form_filtros input[name='f-fecha2']").change( function()
		{changeCampoFecha("#form_filtros input[name='f-fecha1']", "#form_filtros input[name='f-fecha2']", 2);});



	// ---------- Ciclo Newlong ---------- //

	// Cada vez que se tilda o destilda un ciclo:
	// - Se tildan o destildan la mitad o todas sus ordenes de trabajo.
	// - Se destilda cualquier otro ciclo.
	// - Se modifican las fecha de inicio y de fin de la planificación.
	jQuery("form.newlong input.checkbox_cn").change(function()
		{
                var form = jQuery(this).closest("form");
		var cicloId = jQuery(this).val();
		// Verifico el checkbox se tildo o se destildó.
                if(jQuery(this).attr("checked"))
			{
			var fecha1 = convertirFechaHora(jQuery(this).attr("data-fechaInicio"));
			var fecha2 = convertirFechaHora(jQuery(this).attr("data-fechaFin"));
			var capacidad = parseInt(jQuery(this).attr("data-capacidad"), 10);
                        var cicloNumero = parseInt(jQuery(this).attr("data-cicloNumero"), 10);
                       // Verifico si el ciclo dura más de una semana.
			if(Util.timeBetween(fecha1, fecha2, 'd') > 8)
				{
				// Selecciono la mitad de sus órdenes de trabajo..
//                                var primerSemana = parseDate(fecha1, "yymmdd")
//                                alert("Fin de la semana:" + fecha1);
//				var cant = jQuery(form).find("input.checkbox_ot[data-cicloId='"+cicloId+"']").size();
//				var limit = parseInt((cant+1)/2, 10);
				jQuery(form).find("input.checkbox_ot[data-cicloNumero ='"+cicloNumero+"'][data-semana='"+1+"']").attr("checked", "checked");
				
				// Divido en dos la capacidad y la duración del ciclo.
				capacidad /= 2;
				fecha2.setTime(fecha1.getTime() + (fecha2.getTime()-fecha1.getTime())/2);
				}
			else
				{
				// Selecciono sus órdenes de trabajo.
				jQuery(form).find("input.checkbox_ot[data-cicloId='"+cicloId+"']").attr("checked", "checked");
				}
			
			// Destildo los demás ciclos.
			jQuery(form).find("input.checkbox_cn[name!='cn_"+cicloId+"']:checked").each(function()
				{
				jQuery(this).removeAttr("checked");
				jQuery(form).find("input.checkbox_ot[data-cicloId='"+jQuery(this).val()+"']").removeAttr("checked");
				});
						
			// Actualizo los valores de la planificación.
			EstimacionPlanificacion_actualizar(form, fecha1, fecha2, capacidad);
			}
		else
			{
			// Destildo sus ordenes de trabajo.
			jQuery(form).find("input.checkbox_ot[data-cicloId='"+cicloId+"']").removeAttr("checked");
			
			// Elimino los valores de la planificación.
			EstimacionPlanificacion_reset(form);
			}

                  if(EstimacionPlanificacion_disponible(formU) < 0) {
                        jQuery("#div_informacion").dialog('open');
                    }

		});
	
	// Cada vez que se tilda o destilda una orden de trabajo:
	// - Se recalcula la cantidad de bolsas. y la fecha de fin de la planificacion.
	jQuery("form.newlong input.checkbox_ot").change(function()
		{
    
                var form = jQuery(this).closest("form");
                EstimacionPlanificacion_actualizar(form);

		});



	// ---------- Planificación ---------- //

	// El formulario para dar de alta una planificacion inicialmente se encuentra oculto.
	jQuery("#div_planificacion").hide();

	// Al presionar el boton 'Planificar', del formulario de la newlong, se abre el formulario de alta.
	jQuery("form.newlong button[name='planificar']").click(function()
		{
		var formU = jQuery(this).closest("form");
		
		// Verifico si: 
		// - Se selecciono un ciclo.
		// - Se selecciono al menos una orden de trabajo.
		// - Las ordenes de trabajo no superan la capacidad del ciclo.
		// - Las ordenes de trabajo que no fueron seleccionadas (en el caso de que el ciclo sea de dos semanas) no superan la capacidad del ciclo.
		var msj = '';
		if(jQuery(formU).find("input.checkbox_cn:checked").size() <= 0) {msj = 'Debe seleccionar un ciclo para poder realizar una planificación.<br/>';}
		else if(jQuery(formU).find("input.checkbox_ot:checked").size() <= 0) {msj = 'Debe seleccionar al menos una orden de trabajo para poder realizar una planificación.<br/>';}
		//else if(!EstimacionPlanificacion_estaBalanceado(formU)) {msj = 'Debe seleccionar más ordenes de trabajo del ciclo seleccionado para poder realizar la planificación.'}
		if(msj.length > 0)
			{
			mostrarMsj("Error", msj);
			return false;
			}

                // Leo los valores del ciclo.
                if(EstimacionPlanificacion_disponible(formU) < 0) {
                        jQuery("#div_informacion").dialog('open');
                    }

		var newlong = jQuery(formU).find("input[name='newlong']").val();
		var bolsas = jQuery(formU).find("input[name='bolsas']").val();
		var capacidad = jQuery(formU).find("input[name='capacidad']").val();
		var fechaInicio = jQuery(formU).find("input[name='fecha_inicio']").val();
		var fechaFin = jQuery(formU).find("input[name='fecha_fin']").val();
		var cicloId = jQuery(formU).find("input.checkbox_cn:checked").val();
                // Leo las ordenes de trabajo.

		var ordenes = new Array();
		jQuery(formU).find("input.checkbox_ot:checked").each(function(index)
			{
			var orden = new Array();
			orden['id'] = jQuery(this).val();
			orden['identificador'] = jQuery(this).attr("data-identificador");
			orden['newlong'] = jQuery(this).attr("data-newlong");
			orden['cicloNewlongNumero'] = jQuery(this).attr("data-cicloNumero");
			orden['cicloNewlongId'] = jQuery(this).attr("data-cicloId");
			orden['formato'] = jQuery(this).attr("data-formato");
			orden['tipoPapel'] = jQuery(this).attr("data-tipoPapel");		
			orden['bolsas'] = jQuery(this).attr("data-bolsas");		
			orden['info'] = jQuery(this).attr("data-info");		
			orden['manija'] = jQuery(this).attr("data-manija");		
			orden['logotipo'] = jQuery(this).attr("data-logotipo");		
			orden['fechaPrometida'] = jQuery(this).attr("data-fechaPrometida");			
			ordenes.push(orden);
			});	
			
		listaOrdenes.setOrdenes(ordenes);
		listaOrdenes.setFechaInicio( convertirFechaHora(fechaInicio + ":00") );
		listaOrdenes.setFechaFin(convertirFechaHora(fechaFin + ":00"));
		listaOrdenes.setCapacidad(parseInt(bolsas.replace(/\./g, ''), 10));		

		// Inserto los valores al formulario.
		jQuery("#form_planificacion input[name='newlong']").val(newlong);
		jQuery("#form_planificacion input[name='ciclo_id']").val(cicloId);
		jQuery("#form_planificacion input[name='fecha_inicio']").val(fechaInicio);
		jQuery("#form_planificacion input[name='fecha_fin']").val(fechaFin);
		jQuery("#form_planificacion input[name='capacidad']").val(capacidad);
		jQuery("#form_planificacion input[name='bolsas']").val(bolsas);
		jQuery("#form_planificacion input[name='ids']").val(listaOrdenes.getIds());
		jQuery("#form_planificacion input[name='bloqueado']").attr("checked", "checked");
                // Realizo una llamada Ajax para obtener las etapas del ciclo.
		jQuery("form.newlong button[name='planificar']").attr('disabled', true);
		
		jQuery.ajax({
					type: 'POST',
					url: 'svcs/ciclos-newlong.jsp',
					dataType: 'json',
					data: {'service': 'etapas',
						   'id' : cicloId,
						   'timestamp': timestamp()},

					success: function(data, code, xmlHttpRequest)
						{ 
						// Verifico si la operacion fue exitosa o no.
						if(data.code != '0')
							{mostrarMsj("Error",data.msj);}
						else
							{
							var i,k;
							
							// Cambio las cantidades.
							var etapas = new Array();
							for(i=0; i<data.etapas.length; i++)
								{
								var e = new Object();
								e['orden'] = parseInt(data.etapas[i].orden, 10);
								e['formatoId'] = data.etapas[i].formatoId;
								e['formato'] = data.etapas[i].formato;
								
								var cant = 0;
								for(k=0; k<ordenes.length; k++)
									{
									if(ordenes[k].formato == e['formato'])
										{cant += parseInt(ordenes[k].bolsas, 10) * parseInt(capacidad, 10) / parseInt(bolsas, 10);}
									}
								e['cantidad'] = parseInt(cant, 10);
								etapas.push(e);
								}

							// Pongo al final aquellas etapas con la cantidad en 0;
							etapas.sort(function(e1, e2)
								{
								if(e1['cantidad'] == 0) return 1;
								if(e2['cantidad'] == 0) return -1;
								return 0;
								})
							for(i=0; i<etapas.length; i++) {etapas[i].orden = i+1;}

							// Saco aquellas etapas que no poseen órdenes.
							var idsE = '';
							var cont = true;
							while(cont || etapas.length == 0)
								{
								var ult = etapas[etapas.length - 1];
								if(ult.cantidad == 0)
									{
									if(idsE.length > 0) idsE += ',';
									idsE += ult.formato + ':' + etapas.length;
									etapas.pop();
									}
								else
									{cont = false;}
								}
							jQuery("#form_planificacion input[name='etapas']").val(idsE);					
								
							// Ordeno las órdenes e inserto el código Html.
							listaOrdenes.setEtapas(etapas);
							listaOrdenes.ordenar();
							listaOrdenes.insertarHtml();

							// Muestro el formulario.
							jQuery('#div_ciclos').hide("blind", {}, 300, function()
								{jQuery('#div_planificacion').show("blind", {}, 300);});
							}
						jQuery("form.newlong button[name='planificar']").removeAttr('disabled');
						},
					
					error: function(xmlHttpRequest, type)
						{
						jQuery("form.newlong button[name='planificar']").removeAttr('disabled');
						mostrarMsj("Error","No se pudo establecer la conexión con el servidor: " + type + " " + xmlHttpRequest.status + " (" + xmlHttpRequest.statusText + ")");
						}
					});
		
		return false;
		});
	
	// Al presionar el boton 'Cancelar' se oculta el formulario de alta.
	jQuery("#form_planificacion button[name='cancelar']").click(function()
		{
		jQuery('#div_planificacion').hide("blind", {}, 300, function()
			{jQuery('#div_ciclos').show("blind", {}, 300);});
		return false;
		});
		
	// Al presionar el boton 'Guardar' se envia el formulario.
	jQuery("#form_planificacion button[name='guardar']").click(function()
		{
		// Serializo el turno de las ordenes y de las etapas.
                jQuery("#form_planificacion input[name='ids']").val(listaOrdenes.getIds());
		jQuery("#form_planificacion input[name='etapas']").val(listaOrdenes.getIdsFormatos() + ',' + jQuery("#form_planificacion input[name='etapas']").val());
		var formU = jQuery(this).closest("form");
		// Envío el formulario.
		jQuery("#form_planificacion").submit();
		return false;
		});
	
	
	
	// ---------- Reprogramación ---------- //

	// El formulario de reprogramacion es una ventana emergente.
	jQuery("#div_reprogramacion").dialog(
        {
        autoOpen: false,
		show: 'slide',
		hide: 'slide',
        width: 600,
        modal: true
		});
	
	// Botón 'Reprogramar' del formulario de reprogramación.
	jQuery("#form_reprogramacion button[name='guardar']").click(function()
		{
		// Verifico que se haya seleccionado un ciclo.
		if(jQuery("#form_reprogramacion input[name='ciclo_nuevo']:checked").size() > 0)
			{jQuery("#form_reprogramacion").submit();}
		else
			{jQuery("#div_reprogramacion").dialog('close');}
		
		return false;
		});
	
	// Botón 'Cancelar' del formulario de reprogramación.
	jQuery("#form_reprogramacion button[name='cancelar']").click(function()
		{
		jQuery("#div_reprogramacion").dialog('close');
		return false;
		});
	
	// Al presionar el boton de configuracion de una orden, permite reprogramarla.
	jQuery("a.reprogramar").click(function()
		{ 
		// Cargo los datos de la orden.
		var id = jQuery(this).attr("data-id");
		var info = jQuery(this).attr("data-info");
		var cicloId = jQuery(this).attr("data-cicloId");
		jQuery("#form_reprogramacion input[name='orden_id']").val(id);
		jQuery("#form_reprogramacion input[name='ciclo_actual']").val(info);
		// Busco las fechas posibles.
		jQuery("#td_reprogramacion_ciclos").children().remove();
		jQuery.ajax({
			type: 'POST',
			url: 'svcs/fechas-entrega-reprogramacion.jsp',
			dataType: 'json',
			data: {'service': 'cambiar-confeccion',
				   'pedido_id': id,
				   'planificado': true,
				   'timestamp': timestamp()},
					success: function(data, code, xmlHttpRequest)
						{
						if(data.code == '0')
							{
							// Cargo los ciclos.
							var c = 0;
							var html = '<div>';
							for(var i=0; i<data.ciclosConfeccion.length; i++)
								{
								var ciclo = data.ciclosConfeccion[i];
								
								if(cicloId != ciclo.cicloNewlongId)
									{
									if(c != 0) html += '<br/>';
									if(ciclo.superaPrometida) html+= '<span style="color:#aa0000">';
									html += '<input type="radio" name="ciclo_nuevo" value="' + ciclo.cicloNewlongId + '" '
										+ 'data-fechaInicio="'+ciclo.fechaHoraInicio+'"/> '
										+ getNewlongDescription(ciclo.newlongId) + ' - '
										+ 'Ciclo ' + ciclo.cicloNewlongNumero + ' - '
										+ ciclo.fechaHoraFin.substring(0, 10) + ' - '
										+ 'Disponible: ' + ciclo.cantidadDisponible + ' (' + ciclo.porcentajeDisponible + '%)';
									if(ciclo.superaPrometida) html+= '</span>';
									c++;
									}
								}
							if(c == 0)
								{html += 'No se encontraron ciclos disponibles para reprogramar este pedido.';}
							html += '</div>';

							jQuery("#td_reprogramacion_ciclos").append(html);
							}
						else
							{jQuery("#td_reprogramacion_ciclos").append('<span>'+data.msj+'</span>');}
						},
					error: function(xmlHttpRequest, type)
						{jQuery("#td_reprogramacion_ciclos").append("<span>No se pudo establecer la conexión con el servidor: " + type + " " + xmlHttpRequest.status + " (" + xmlHttpRequest.statusText + ")</span>");}
			});
		
		// Abro la ventana.
		jQuery("#div_reprogramacion").dialog('open');
		return false;
		});


	
	// ---------- Excel ---------- //

	// Boton para exportar a Excel.
	jQuery("#form_filtros button[name='exportar']").click(function()
	{
            jQuery("#div_excel_confirmacion").dialog('open');
            return false;
	});
        jQuery("#form_filtros button[name='scada']").click(function()
	{
            jQuery("#form_cascada").submit();
            return false;
	});
	
	// El formulario con las opciones de exportación es una ventana emergente.
	jQuery("#div_excel_confirmacion").dialog(
			{
	        autoOpen: false,
			show: 'slide',
			hide: 'slide',
	        width: 420,
	        modal: true,
			buttons:
				{
				"Exportar todos": function()
					{
					jQuery(this).dialog("close");
					jQuery("#form_excel").submit();
					},
				"Exportar planificados": function()
					{
					jQuery(this).dialog("close");
					jQuery("#form_excel input[name='ids']").val(jQuery("#form_excel input[name='ids_planificados']").val());
					jQuery("#form_excel").submit();
					}
				}
			});
        jQuery("#div_informacion").dialog(
			{
	        autoOpen: false,
			show: 'slide',
			hide: 'slide',
	        width: 420,
	        modal: true,
			buttons:
				{
				"Aceptar": function()
					{
                                        jQuery(this).dialog("close");
                                        jQuery('#div_ciclos').hide("blind", {}, 300, function()
								{jQuery('#div_planificacion').show("blind", {}, 300);});
							
                                        return false;
                                        
					}

                                }
			});
	});





function diferenciaFechas(fecha1, fecha2)
	{
	var res = 0;
	fecha1 = convertirFechaHora(fecha1 + ":00");	
	fecha2 = convertirFechaHora(fecha2 + ":00");
	fecha1 = (fecha1 != null)? fecha1.getTime() : 0;
	fecha2 = (fecha2 != null)? fecha2.getTime() : 0;
	res = fecha1-fecha2;
	return (res>=0)? res : -res;
	}

function EstimacionPlanificacion_actualizar(form, fecha1, fecha2, capacidad)
	{
	// Actualizo los campos.
	if(fecha1 != null) {jQuery(form).find("input[name='fecha_inicio']").val(Util.formatDate(fecha1, "dd/MM/yyyy HH:mm"));}
	if(fecha2 != null) {jQuery(form).find("input[name='fecha_fin']").val(Util.formatDate(fecha2, "dd/MM/yyyy HH:mm"));}
	if(capacidad != null) {jQuery(form).find("input[name='capacidad']").val(formatoNumero(capacidad));}

	// Calculo los metros totales.
	var bolsas = 0;
	jQuery(form).find("input.checkbox_ot:checked").each(function(index)
		{bolsas += parseInt(jQuery(this).attr("data-bolsas"), 10);});
	jQuery(form).find("input[name='bolsas']").val(formatoNumero(bolsas));
	
	// Destaco las filas seleccionadas (y NO muestro sus parientes).
	jQuery(form).find("tr.orden.destacado").removeClass("destacado");
	jQuery(form).find("tr.orden.sugerencia").removeClass("sugerencia");
	jQuery(form).find("input.checkbox_ot:checked").each(function()
		{
		jQuery(this).parent().parent().addClass("destacado");
		
		var logotipo = jQuery(this).attr("data-logotipo");
		jQuery(form).find("input.checkbox_ot[data-logotipo='"+logotipo+"']").each(function()
			{
			if(!jQuery(this).attr("checked") && !jQuery(this).parent().parent().hasClass("sugerencia"))
				{jQuery(this).parent().parent().addClass("sugerencia")}
			});
               
		
		});	
	}

function EstimacionPlanificacion_reset(form)
	{
	jQuery(form).find("input[name='fecha_inicio']").val('');
	jQuery(form).find("input[name='fecha_fin']").val('');
	jQuery(form).find("input[name='capacidad']").val('');
	jQuery(form).find("input[name='bolsas']").val('');
	jQuery(form).find("tr.orden.destacado").removeClass("destacado");	
	}


function EstimacionPlanificacion_disponible(form)
	{
	var bolsas = jQuery(form).find("input[name='bolsas']").val();
	var capacidad = jQuery(form).find("input[name='capacidad']").val();
	
	bolsas = Util.parseNumber(bolsas, ',', '.');
	capacidad = Util.parseNumber(capacidad, ',', '.');
	
	return capacidad - bolsas;
	}
	
function EstimacionPlanificacion_estaBalanceado(form)
	{
	// En el caso de que el ciclo seleccionado dure más de una semana, debo verificar que las órdenes no seleccionadas no superen a la mitad de la capacidad del ciclo.
	var cicloId = jQuery(form).find("input.checkbox_cn:checked").val();
	var capacidad = Util.parseNumber(jQuery(form).find("input[name='capacidad']").val(), ',', '.');
        var bolsas = 0;
	jQuery(form).find("input.checkbox_ot[data-cicloId='"+cicloId+"']").each(function(index)
		{
                if(! jQuery(this).attr("checked"))
			{bolsas += parseInt(jQuery(this).attr("data-bolsas"), 10);}
		});
	return capacidad > bolsas;
	}

function diferenciaFechaNewLong(fecha1, fecha2)
	{
	var res = 0;
	fecha1 = convertirFechaHora(fecha1 + ":00");
	fecha2 = convertirFechaHora(fecha2 + ":00");
	fecha1 = (fecha1 != null)? fecha1.getTime() : 0;
	fecha2 = (fecha2 != null)? fecha2.getTime() : 0;
	res = fecha1-fecha2;
	return (res>=0)? res : -res;
	}


